// Useful constants for CPU registers
enum {
	kCPUReg_zero		= 0,	// Always 0
	kCPUReg_at			= 1,	// Reserved for assembler
	kCPUReg_v0			= 2,	// Return value registers
	kCPUReg_v1			= 3,
	kCPUReg_a0			= 4,	// Argument registers
	kCPUReg_a1			= 5,
	kCPUReg_a2			= 6,
	kCPUReg_a3			= 7,
	kCPUReg_t0			= 8,	// Temporary registers (caller save)
	kCPUReg_t1			= 9,
	kCPUReg_t2			= 10,
	kCPUReg_t3			= 11,
	kCPUReg_t4			= 12,
	kCPUReg_t5			= 13,
	kCPUReg_t6			= 14,
	kCPUReg_t7			= 15,
	kCPUReg_t8			= 24,
	kCPUReg_t9			= 25,
	kCPUReg_s0			= 16,	// Subroutine registers (callee save)
	kCPUReg_s1			= 17,
	kCPUReg_s2			= 18,
	kCPUReg_s3			= 19,
	kCPUReg_s4			= 20,
	kCPUReg_s5			= 21,
	kCPUReg_s6			= 22,
	kCPUReg_s7			= 23,
	kCPUReg_s8			= 30,	// Doubles as frame pointer register!
	kCPUReg_k0			= 26,	// Reserved for interrupt/trap handlers
	kCPUReg_k1			= 27,
	kCPUReg_gp			= 28,	// Global pointer
	kCPUReg_sp			= 29,	// Stack pointer
	kCPUReg_fp			= 30,	// Frame pointer
	kCPUReg_ra			= 31,	// Return register
};

